//
//  WLProxySession.h
//  WLProxy
//
//  Created by wangpeng on 2022/11/2.
//

#import <Foundation/Foundation.h>
#import "WHWLProxyTask.h"

@interface WHWLProxySession : NSObject

/// 配置任务参数
/// @param params 		任务参数
/// @note				入参 params 的 XML 格式：
///						<param>
///							<uri>自己的标识</uri>
///							<path>运行时数据全路径（放接收文件和日志等，不填则默认动态库所在路径）</path>
///							<logv>日志等级 0 1 2 3 4</logv>
///							<runtime>
///								<thread_recv>接收线程数（不填则默认2）</thread_recv>
///								<thread_send>发送线程数（不填则默认1）</thread_send>
///							</runtime>
///						</param>
///
///						1. 任务参数记录最后一次的配置。
///						2. 每次调用此方法时，应确保没有正在进行中的请求。
///						（即必须在之前的所有请求结束之后，再调用此方法重新配置任务参数）
///						3. 如果 params 为空或者此方法不调用，则默认为：
///						<?xml version=\"1.0\" encoding=\"gb2312\" ?>
///						<param>
///							<uri>uuid</uri>
///							<path>/手机沙盒/Library/Caches/FileDownload</path>
///							<logv>4</logv>
///							<challenge />
///						</param>
//+ (BOOL)configTaskParams:(NSString *)params;

/// 发起请求
/// @param method 		请求方式
/// @param config 		请求配置
/// @param params 		请求参数
/// @param custom 		自定义参数
/// @param progress 		进度回调
/// @param success 		成功回调
/// @param failure 		失败回调
/// @note				1. 入参 config 的 XML 格式：
///						<param>
///							<proxy>代理服务地址 IP:PORT</proxy>
///							<target>请求对方的标识</target>
///							<timeout>超时（秒）</timeout>
///						</param>
///						2. 入参 params 的格式：
///							a. 当请求方式为下载时，params 与使用服务提供者约定
///							b. 当请求方式为上传时，入参 params 的 XML 格式：
///							<manifest>
///								<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///								<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///								...
///								<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///							</manifest>
///	@note progress		result 的 XML 格式：
///						<info>
///							<doing_file>当前上传/下载文件名</doing_file>
///							<doing_pos> 当前文件进度(bytes)</doing_pos>
///							<doing_size>当前文件大小(bytes)</doing_size>
///							<total_pos> 所有文件进度(bytes)</total_pos>
///							<total_size>所有文件大小(bytes)</total_size>
///						</info>
///	@note success			result 的 XML 格式：
///						<manifest>
///							<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///							<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///							...
///							<item file="文件(全路径)" size="文件尺寸(bytes)">文件名</item>
///						</manifest>
///	@note failure			result 的 XML 格式：
///						<info>
///							<error_code><error_code>
///							<error_msg><error_msg>
///						</info>
/// @return				请求的唯一标识
+ (NSString *)requestWithSession:(NSString *)session
                          Method:(WLProxyTaskMethod)method
                          config:(NSString *)config
                          params:(NSString *)params
                          custom:(NSString *)custom
                        progress:(void (^)(NSString *result))progress
                         success:(void (^)(NSString *result))success
                         failure:(void (^)(NSString *result))failure;

/// 取消请求
/// @param identifier 	请求的唯一标识
+ (void)cancelRequestWithIdentifier:(NSString *)identifier;

/// 暂停请求
/// @param identifier 	请求的唯一标识
+ (void)pauseRequestWithIdentifier:(NSString *)identifier;

/// 继续请求
/// @param identifier 	请求的唯一标识
+ (void)resumeRequestWithIdentifier:(NSString *)identifier;

+(void)terminateInvoker;

+(NSString *)getErrorTitleWithRe:(int) re;

@end
